package edu.uoc.tds.pec4.server.bbdd;

/**
 * 
 */


import java.rmi.RemoteException;
import java.sql.Connection;
import java.util.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

//import javax.swing.JOptionPane;

//import edu.uoc.tds.pec4.beans.ConvocatoriaCurso;
import edu.uoc.tds.pec4.beans.Grupo;
//import edu.uoc.tds.pec4.beans.TipoEvaluacion;
import edu.uoc.tds.pec4.beans.Turno;

//import edu.uoc.tds.pec4.i18n.TDSLanguageUtils;

/**
 * @author pacomu
 *
 */
public class GestorGrupos {


	/**
	 * Obtiene una lista de los grupos que hay actualmente
	 * 
	 * @return lista de Grupo.
	 */
	public static List<Grupo> listarGrupos(int campo, String filtro, Connection conexion) throws SQLException, Exception {
		List<Grupo> lGrupos = new ArrayList<Grupo>();

		Statement st = null;
		ResultSet rs = null;
				st = conexion.createStatement(
				ResultSet.TYPE_SCROLL_INSENSITIVE,
				ResultSet.CONCUR_UPDATABLE);
				//if(filtro==null)
				//	filtro="*";
				String query = null;
				switch (campo+1){
				case 1: query = "SELECT grupos.* FROM grupos, cursos WHERE grupos.idcurso = cursos.idcurso AND cursos.nombre LIKE '%"+filtro+"%'"; //nombre curso
						break;
				case 2: query = "SELECT * FROM grupos WHERE grupos.turno ='"+filtro+"'"; //turno
						break;
				case 3:	query = "SELECT grupos.* FROM grupos, convocatorias WHERE grupos.idcurso = convocatorias.idcurso AND convocatorias.f_desde ='"+ filtro+ "'"; //fecha inicio
						break;
				case 4:	query = "SELECT grupos.* FROM grupos, convocatorias WHERE grupos.idcurso = convocatorias.idcurso AND convocatorias.f_hasta ='"+ filtro + "'";  //fecha fin
						break;
				case 5: query = "SELECT grupos.* FROM grupos, convocatorias WHERE grupos.idcurso = convocatorias.idcurso AND grupos.idcurso="+ Integer.parseInt(filtro); 
						break;
				case 6: query = "SELECT * FROM grupos WHERE grupos.idusuario="+ Integer.parseInt(filtro);
						break;
				case 7: query = "SELECT * FROM grupos WHERE grupos.idaula="+ Integer.parseInt(filtro);
						break;
				case 8: query = "SELECT * FROM grupos "+filtro; //turno y grupo para evitar duplicados
						break;
				case 9: query = "SELECT * FROM grupos, cursos WHERE grupos.idcurso = cursos.idcurso "; //modificacion matriculas
						break;
				default: query = "SELECT * FROM grupos";
					break;
						
				}
			////System.out.println("query="+query);	
		rs = st.executeQuery(query);
		while (rs.next()) {
			Grupo grupo = new Grupo();
			grupo.setIdGrupo(rs.getInt("idgrupo"));
			grupo.setIdCurso(rs.getInt("idcurso"));
			grupo.setIdAula(rs.getInt("idaula"));
			grupo.setProfesor(rs.getInt("idusuario"));
			grupo.setMaxAlumnos(rs.getInt("maxalumnos"));
			grupo.setTurno(Turno.valueOf(rs.getString("turno")));
			lGrupos.add(grupo);	
			}
		
		return lGrupos;
	}
	

	
	/**
	 * Inserta en la bbdd un Grupo	 
	 * @return int = 1 si ha habido �xito, 0 en caso contrario
	 */	
	public static int insertarGrupo(Grupo grupo, Connection conexion) throws SQLException, Exception {		
        boolean rdo = false;
   
            String insert = "INSERT INTO grupos VALUES (nextval('grupos_idgrupo_seq'), ?, ?, ?, ?, ?)";            
            PreparedStatement st = conexion.prepareStatement(insert, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);                        
            //st.setInt(1,grupo.getIdGrupo());
            st.setInt(1,grupo.getIdCurso());
            st.setInt(2, grupo.getIdAula());
            st.setInt(3, grupo.getProfesor());
            st.setInt(4, grupo.getMaxAlumnos());
            st.setString(5, ""+grupo.getTurno());
            rdo = st.execute(); 
            System.out.println("rdo. inserci�n grupo:"+rdo);
            st.close();
        if (rdo == true)    
        	return 1;
        else
        	return 0;
	}
	

	public static Grupo obtieneGrupo(int idGrupo, Connection conexion) throws RemoteException,
			SQLException, Exception {
		 Grupo grupo = null;
			Statement st = null;
			ResultSet rs = null;
					st = conexion.createStatement(
					ResultSet.TYPE_SCROLL_INSENSITIVE,
					ResultSet.CONCUR_UPDATABLE);
					String query = "SELECT * FROM grupos WHERE idgrupo = " + idGrupo;
					rs = st.executeQuery(query);
			if (rs.next()) {
				grupo = new Grupo();
				grupo.setIdGrupo(rs.getInt("idgrupo"));
				grupo.setIdCurso(rs.getInt("idcurso"));
				grupo.setIdAula(rs.getInt("idaula"));
				grupo.setProfesor(rs.getInt("idusuario"));
				grupo.setMaxAlumnos(rs.getInt("maxalumnos"));
				grupo.setTurno(Turno.valueOf(rs.getString("turno")));			
			}
			rs.close();        
	        
	        return grupo;
	}


	
	public static int modificarGrupo(Grupo grupo, Connection conexion) throws SQLException, Exception {		
        int rdo = 0;
        PreparedStatement st = null;
          	String query = "UPDATE grupos SET idcurso=?, idaula=?, idusuario=?,";
        	query=query+" maxalumnos=?, turno=? ";  	   
        	query = query + "WHERE idgrupo=" + grupo.getIdGrupo();
            st = conexion.prepareStatement(query,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
            
            //st.setInt(1,grupo.getIdGrupo());
            st.setInt(1,grupo.getIdCurso());
            st.setInt(2, grupo.getIdAula());
            st.setInt(3, grupo.getProfesor());
            st.setInt(4, grupo.getMaxAlumnos());
            st.setString(5, ""+grupo.getTurno());
            rdo = st.executeUpdate(); 
            //System.out.println("rdo. actualizacion grupo:"+rdo);
            st.close();
       return rdo;
}
	


	public static Date deStringToDate(String fecha) {
        SimpleDateFormat formatoDelTexto = new SimpleDateFormat("yyyy/MM/dd");
        Date fechaEnviar = null;
        try {
            fechaEnviar = formatoDelTexto.parse(fecha);
            return fechaEnviar;
        } catch (ParseException ex) {
			// JOptionPane.showMessageDialog(null, ex.getMessage(), TDSLanguageUtils.getMessage("cliente.error.titulo"), JOptionPane.ERROR_MESSAGE);
            return null;
        }
    }
 

}
